home *** CD-ROM | disk | FTP | other *** search
-
- /*** Routin of test for graphics3d.library **/
- /** SEE 3dlib.h also **/
-
- PROC main()
- DEF a3d:LONG
- DEF g:LONG
- DEF w:LONG
- DEF i:LONG
- DEF in:LONG
- DEF out:LONG
- DEF ob:LONG
- DEF np:LONG
- DEF d:LONG
- DEF s:LONG
- DEF cb:LONG
- DEF mode:LONG
- DEF c1:rgbtype
- DEF c2:rgbtype
- DEF vdist:LONG
- DEF gcolor:LONG
- DEF x0:LONG
- DEF y0:LONG
- DEF pjt:LONG
- DEF id:LONG
- DEF px:LONG
- DEF py:LONG
- DEF ay:LONG
- DEF ax:LONG
- DEF lx:LONG
- DEF ly:LONG
- DEF lz:LONG
- DEF il:LONG
- DEF vx:LONG
- DEF sx:LONG
- DEF ds:LONG
- DEF sl:LONG
- DEF fa:LONG
- DEF fd:LONG
- DEF fm:LONG
- DEF sid:LONG
- DEF dw:LONG
- DEF dh:LONG
- DEF esi:LONG
- DEF dts:datestamp
- DEF dts1:datestamp
- DEF time:LONG
- DEF scrr:PTR TO screenmoderequester
- DEF buf[100]:STRING
-
-
- WriteF('INIZIALIZZAZIONE ...\n')
- sid:=$8000
- dw:=640
- dh:=240
-
- aslbase:=NIL
- IF ((aslbase:=OpenLibrary('asl.library',38))<=NIL) THEN JUMP no_asl
-
- scrr:=AllocAslRequest(ASL_SCREENMODEREQUEST,
- [ASLSM_MAXDEPTH,8,
- ASLSM_MINDEPTH,5,
- ASLSM_MINWIDTH,640,
- NIL])
- IF scrr=NIL THEN JUMP abort_b1
-
- IF AslRequest(scrr,[NIL])=FALSE THEN JUMP abort_b1
-
- dw:=scrr.displaywidth
- dh:=scrr.displayheight
- sid:=scrr.displayid
-
- no_asl:
-
- WriteF('mode_id:$\h width:\d height:\d\n',sid,dw,dh)
-
- /*s:=OpenS(dw,dh,5,sid,'TEST 3DLIBS VERS. IN E')*/
- s:=OpenScreenTagList(NIL,
- [SA_TITLE,'TEST 3DLIBS VERS. IN E',
- SA_DEPTH,5,
- SA_TYPE,CUSTOMSCREEN,
- SA_DISPLAYID,sid,
- SA_WIDTH,dw,
- SA_HEIGHT,dh,
- NIL])
- IF s<=NIL THEN JUMP abort_b1
-
- g:=start_es(s)
- IF g<=NIL
- CloseScreen(s)
- JUMP abort_b1
- ENDIF
-
- w:=gad_w(g,20,20,550,200,'prova 3dlib',13)
-
- WriteF('window=\d\n',w)
-
- /** set mode cursor for object and initial light position **/
- fm:=0
- sl:=16
- il:=1*FIXV
- lx:=0
- ly:=0
- lz:=sl*9
- /********************************/
-
- /** OPEN AND INITIALIZE A NEW 3D SPACE **/
- a3d:=display3d(w,0,0,350,150,300)
- IF a3d=NIL THEN JUMP abort_b
- /***************************************/
-
- /** TEST FUNCTION INTEGER <-> FIXPOINT ***/
- i:=12
- WriteF('i2f=\d\n',Gd_int2fix({i},{out}))
- WriteF('f2i=\d\n',Gd_fix2int({out},{in}))
- WriteF('orig=\d int=\d fix=\d \n',i,in,out)
- /****************************************/
-
- /** DEFINE TWO SFUMATE COLOURS, FOR FLAT SHADING **/
- c1.r:=0
- c1.g:=0
- c1.b:=0
- c2.r:=15
- c2.g:=8
- c2.b:=0
- Gd_touchpalette(a3d,16,30,c1,c2)
- WriteF('touch1\n')
- c1.r:=0
- c1.g:=0
- c1.b:=0
- c2.r:=0
- c2.g:=8
- c2.b:=15
- Gd_touchpalette(a3d,1,15,c1,c2)
- WriteF('touch2\n')
- /**************************************************/
-
- /** SET DEFAULT SOLID SHADING **/
- cb:=1
- mode:=SOLID
- /*******************************/
-
- /** DEFINE A NEW ASPECT RATIO FOR A 640x256 SCREEN **/
- Gd_aspectratio(a3d,FIXV/2)
- WriteF('change aspect ratio\n')
- /****************************************************/
-
- esi:=0
- /** CREATE AND POSITION OF #1 OBJECT *****/
- WriteF('Leggo #1 oggetto...\n')
- i:=plgloadobject(a3d,'pyramid.plg',1*FIXV)
- WriteF('result plgloadobject #1 :\d\n',i)
- IF i<>0 THEN Gd_positionobject(a3d,500*FIXV,0,560*FIXV)
- esi:=esi+i
-
- /** CREATE AND POSITION OF 2# OBJECT *****/
- WriteF('Leggo #2 oggetto...\n')
- i:=plgloadobject(a3d,'sfera.plg',2*FIXV)
- WriteF('result plgloadobject #2 :\d\n',i)
- IF i<>0 THEN Gd_positionobject(a3d,200*FIXV,0,800*FIXV)
- esi:=esi+i
-
- /** CREATE AND POSITION OF #3 OBJECT *****/
- WriteF('Leggo #3 oggetto...\n')
- i:=plgloadobject(a3d,'cube.plg',1*FIXV)
- WriteF('result plgloadobject #3 :\d\n',i)
- IF i<>0 THEN Gd_positionobject(a3d,0,0,0)
- esi:=esi+i
-
- /** CREATE AND POSITION OF #4 OBJECT *****/
- WriteF('Leggo #4 oggetto...\n')
- plgloadobject(a3d,'pyramid.plg',2*FIXV)
- WriteF('result plgloadobject #4 :\d\n',i)
- IF i<>0 THEN i:=Gd_positionobject(a3d,400*FIXV,0,750*FIXV)
- /*****************************************/
- esi:=esi+i
- IF esi=0 THEN JUMP abort_b
-
- Gd_frustum(a3d,-500,16000) /* CHANGE SOME SETTINGS */
- Gd_clipmode(a3d,ZPLANE) /* EITHER #FRUSTUM OR #ZPLANE */
- Gd_createlightsource(a3d,lx,ly,lz) /* PLACE THE LIGHT SOURCES */
- Gd_ambientlight(a3d,il) /* SET THE INITIAL LIGHT INTENSITY */
- Gd_positioncamera(a3d,0,0,-1000*FIXV)
- /* CAMERA AT SOME HEIGHT OFF THE GROUND */
-
- /** SET OFF ALL SCENE 3D PARAMETERS **/
- /** CHANGE COLOUR OF VISUALIZATION BOX **/
- gcolor:=9
- /** CHANGE OBSERVER DISTANCE **/
- vdist:=200
- /** CHANGE BOX ORIGIN **/
- x0:=10
- y0:=15
- /** CHANGE TYPE OF PROJECTION (experimental) **/
- pjt:=PARAL_P
-
- WriteF('cp. esi=\d\n',Gd_cascene(a3d,[ CS_GCOLOR,gcolor,
- CS_VDIST,vdist,
- CS_NPX0,x0,
- CS_NPY0,y0,
- END_T,NIL]:tag3d))
- /*****************************************/
-
- /** DISPLAY THE BORDERS OF VISUALIZATION BOX **/
- Box(x0-1,y0-1,350+x0+1,150+y0+1,1)
-
- DateStamp(dts)
- /*** RECALC THE VIEWING ***/
- Gd_newview(a3d)
- /*** REDRAW THE VIEWING ***/
- Gd_paintframe(a3d)
- /*** VISUALIZING THE VIEWING ***/
- Gd_switch_rp(a3d)
- DateStamp(dts1)
-
- mouse_ON(g)
-
- IF fm=0 THEN StringF(buf,'objects')
- IF fm=1 THEN StringF(buf,'lights ')
- TextF(380,60,'c_mode :\s',buf)
- TextF(380,70,'x=\d y=\d z=\d ',lx,ly,lz)
- TextF(380,80,'light int.:\d ',il)
-
- ay:=0
- ax:=90
- vx:=0
- sx:=FIXV
- ds:=Shr(FIXV,4)
- d:=0
- ob:=-1
- WHILE (pause(g)=NIL)
-
- time:=(TICKS_PER_SECOND*60*dts1.minute)-(TICKS_PER_SECOND*60*dts.minute)+
- dts1.tick-dts.tick
-
- fa:=0
- d:=0
- i:=inkey(g)
- SELECT i
- /** switch object-light mode cursor **/
- CASE "l"
- fm:=fm+1
- IF fm>1 THEN fm:=0
- fa:=1
- /** SWITCH ON-OFF POLIGONS BORDER ***/
- CASE "b"
- IF cb=1 THEN cb:=-1 ELSE cb:=1
- Gd_changeviewmode(a3d,mode,cb)
- /** SET WIRE FRAME SHADING ***/
- CASE "w"
- mode:=WIREF
- Gd_changeviewmode(a3d,mode,cb)
- /** SET SOLID SHADING **/
- CASE "s"
- mode:=SOLID
- Gd_changeviewmode(a3d,mode,cb)
- /** SET FLAT SHADING **/
- CASE "f"
- mode:=FLAT
- Gd_changeviewmode(a3d,mode,cb)
- CASE CDE
- IF fm=NIL
- ay:=ay+2
- ELSE
- lx:=lx-sl
- ENDIF
- fa:=1
- CASE CSI
- IF fm=NIL
- ay:=ay-2
- ELSE
- lx:=lx+sl
- ENDIF
- fa:=1
- CASE CSU
- IF fm=NIL
- ax:=ax+2
- ELSE
- ly:=ly+sl
- ENDIF
- fa:=1
- CASE CGIU
- IF fm=NIL
- ax:=ax-2
- ELSE
- ly:=ly-sl
- ENDIF
- fa:=1
- CASE "i"
- IF fm=NIL
- sx:=sx+ds
- ELSE
- il:=il+(FIXV/2)
- IF il>(14*FIXV) THEN il:=14*FIXV
- ENDIF
- fa:=1
- CASE "o"
- IF fm=NIL
- sx:=sx-ds
- IF sx<=0 THEN sx:=sx+ds ELSE fa:=1
- ELSE
- il:=il-(FIXV/2)
- IF il<0 THEN il:=0
- fa:=1
- ENDIF
- CASE "8"
- /** MOVE THE VIEWER TO THE SCREEN ***/
- IF fm=0
- d:=40*FIXV
- Gd_moveforward(a3d,d)
- ELSE
- lz:=lz+sl
- fa:=1
- ENDIF
- CASE "2"
- /** MOVE THE VIEWER FROM THE SCREEN ***/
- IF fm=0
- d:=-40*FIXV
- Gd_moveforward(a3d,d)
- ELSE
- lz:=lz-sl
- fa:=1
- ENDIF
- CASE "4"
- /** CHANGE THE ANGLE OF VIEW TO LEFT **/
- vx:=vx+1
- Gd_viewangle(a3d,0,vx,0)
- CASE "6"
- /** CHANGE THE ANGLE OF VIEW TO RIGHT **/
- vx:=vx-1
- Gd_viewangle(a3d,0,vx,0)
- ENDSELECT
-
- np:=mouse(g)
- IF np=1
- px:=mouseX(g)
- py:=mouseY(g)
- TextF(380,20,'oggetto id# ',ob)
- TextF(380,30,'poligono n# ',np)
- TextF(380,40,'Ax=\d Ay=\d sx=\d ',ax,ay,sx)
- TextF(380,50,'X=\d y=\d ',px,py)
- /** TEST IF AT POINT(px,py) IS PRESENT A POLIGON AND AN OBJECT **/
- ob:=Gd_pickobj(a3d,{np},px,py)
- IF ob>NIL
- TextF(380,20,'oggetto id#\d ',ob)
- TextF(380,30,'poligono n#\d ',np)
- ENDIF
- ENDIF
-
- IF fa
- IF fm=0 THEN StringF(buf,'objects')
- IF fm=1 THEN StringF(buf,'lights ')
- TextF(380,60,'c_mode :\s',buf)
- IF (fm=0) AND (ob>0)
- /** SET THE TRASFORMATION TO THE EVENTUALLY PICKED OBJECT **/
- TextF(380,40,'Ax=\d Ay=\d sx=\d ',ax,ay,sx)
- Gd_setobj(a3d,ob)
- Gd_rotateobject(a3d,ax,0,ay)
- Gd_scaleobject(a3d,sx,sx,sx)
- ENDIF
- IF fm
- /** CHANGE LIGHT POSITION **/
- TextF(380,70,'x=\d y=\d z=\d ',lx,ly,lz)
- Gd_createlightsource(a3d,lx,ly,lz)
- /** CHANGE LIGHT INTENSITY **/
- TextF(380,80,'light int.:\d ',il)
- Gd_ambientlight(a3d,il)
- ENDIF
- ENDIF
- IF i>=NIL
- DateStamp(dts)
- /*** RECALC THE VIEWING ***/
- Gd_newview(a3d)
- /*** REDRAW THE VIEWING ***/
- /*** funzione maggiormente bisognosa di ottimizzazione ***/
- Gd_paintframe(a3d)
- /*** VISUALIZING THE VIEWING ***/
- Gd_switch_rp(a3d)
- DateStamp(dts1)
- ENDIF
- TextF(380,90,'ticks:\d ',time)
- ENDWHILE
-
- WriteF('termino.. \n')
- /** CLOSE AND DESTROY ALL DEFINITION CREATE BY display3d **/
- abort_b:
- close_display3d(a3d)
- gad_cw(g)
- end(g,1)
- CloseScreen(s)
- abort_b1:
- IF aslbase<>NIL THEN CloseLibrary(aslbase)
-
- ENDPROC
-